<?php 
class form_helper {
	
	private $form = '';
	const default_form_action = 'post';
	
	public function new_form($action = '', $id='', $class='', $method = ''){
		if(empty($method))$method = self::default_form_action;
		if(empty($action))$action = basename($_SERVER['PHP_SELF']);
		$this->form.= '<form method="'.$method.'"';
		if(!empty($id))$this->form.= ' id="'.$id.'"';
		if(!empty($class))$this->form.= ' class="'.$class.'"';
		$this->form.= 'action="'.$action.'">';
		$this->form.= '<fieldset>';
	}
	
	public function create_input_fields($input_fields){
		if(!empty($this->form)){
			$nr = count($input_fields);
			for($i = 0; $i < $nr; $i++){
				if(array_key_exists('name', $input_fields[$i]) && array_key_exists('type', $input_fields[$i])){
					$this->form.= '<label id="label_'.$input_fields[$i]['name'].'" for="'.$input_fields[$i]['name'].'">';
					if(array_key_exists('label', $input_fields[$i]))$this->form.= $input_fields[$i]['label'];
					$this->form.= '<input type="'.$input_fields[$i]['type'].'" name="'.$input_fields[$i]['name'].'"';
					if(array_key_exists('id', $input_fields[$i]))$this->form.= ' id="'.$input_fields[$i]['id'].'"';
					if(array_key_exists('class', $input_fields[$i]))$this->form.= ' class="'.$input_fields[$i]['class'].'"';
					if(array_key_exists('value', $input_fields[$i]))$this->form.= ' value="'.$input_fields[$i]['value'].'"';
					$this->form.= '/></label>';
				}
			}
		} else {
			$this->new_form();
			$this->insert_input_field($input_fields);
		}
	}
	
	public function create_checkbox_list($checkboxes = array()){
		if(!empty($this->form)){
			$nr = count($checkboxes);
			for($i = 0; $i < $nr; $i++){
				if(array_key_exists('name', $checkboxes[$i]) && array_key_exists('value', $checkboxes[$i])){
					if(array_key_exists('label', $checkboxes[$i]))$this->form.= $checkboxes[$i]['label'];
					$this->form.= '<input type="checkbox" name="'.$checkboxes[$i]['name'].'" value="'.$checkboxes[$i]['value'].'"';
					if(array_key_exists('id', $checkboxes[$i]))$this->form.= ' id="'.$checkboxes[$i]['id'].'"';
					if(array_key_exists('class', $checkboxes[$i]))$this->form.= ' class="'.$checkboxes[$i]['class'].'"';
					if(array_key_exists('checked', $checkboxes[$i]))$this->form.= ' checked="checked"';
					$this->form.= '/>';
				}
			}
		} else {
			$this->new_form();
			$this->insert_check_box_list($checkboxes);
		}
	}
	
	public function create_radio_list($radio){
		if(!empty($this->form)){
			$nr = count($radio);
			for($i = 0; $i < $nr; $i++){
				if(array_key_exists('name', $radio[$i]) && array_key_exists('value', $radio[$i])){
					if(array_key_exists('label', $radio[$i]))$this->form.= $radio[$i]['label'];
					$this->form.= '<input type="radio" name="'.$radio[$i]['name'].'" value="'.$radio[$i]['value'].'"';
					if(array_key_exists('id', $radio[$i]))$this->form.= ' id="'.$radio[$i]['id'].'"';
					if(array_key_exists('class', $radio[$i]))$this->form.= ' class="'.$radio[$i]['class'].'"';
					if(array_key_exists('checked', $radio[$i]))$this->form.= ' checked="checked"';
					$this->form.= '/>';
				}
			}
		} else {
			$this->new_form();
			$this->insert_check_box_list($radio);
		}
	}
	
	public function create_select($select){
		if(!empty($this->form)){
			if(array_key_exists('label', $select[$i]))$this->form.= $select[$i]['label'];
			$this->form.= '<select';
			if(array_key_exists('name', $select))$this->form.= ' name="'.$select['name'].'"';
			if(array_key_exists('id', $select))$this->form.= ' id="'.$select['id'].'"';
			if(array_key_exists('multiple', $select))$this->form.= ' multiple="multiple"';
			if(array_key_exists('size', $select))$this->form.= ' size="'.$select['size'].'"';
			$this->form.= '/>';
			if(array_key_exists('values', $select)){
				$nr = count($select['values']);
				for($i = 0; $i < $nr; $i++){
					if(array_key_exists('value', $select['values'][$i])){
						$this->form.= '<option value="'.$select['values'][$i]['value'].'"';
						if(array_key_exists('selected', $select['values'][$i]))$this->form.= ' selected="selected"';
						$this->form.= '/>';
						if(array_key_exists('name', $select['values'][$i])){
							$this->form.= $select['values'][$i]['name'];
						} else {
							$this->form.= $select['values'][$i]['value'];
						}
						$this->form.= '</option>';
					}
				}
			}
			$this->form.= '</select>';
		} else {
			$this->new_form();
			$this->insert_check_box_list($select);
		}
	}
	
	public function create_hidden_fields($hidden_fields){
		if(!empty($this->form)){
			$nr = count($input_fields);
			for($i = 0; $i < $nr; $i++){
				if(array_key_exists('name', $input_fields[$i]) && array_key_exists('value', $input_fields[$i])){
					$this->form.= '<input type="hidden" name="'.$input_fields[$i]['name'].'" value="'.$input_fields[$i]['value'].'"';
					if(array_key_exists('id', $input_fields[$i]))$this->form.= ' id="'.$input_fields[$i]['id'].'"';
					if(array_key_exists('class', $input_fields[$i]))$this->form.= ' class="'.$input_fields[$i]['class'].'"';
					$this->form.= '/>';
				}
			}
		} else {
			$this->new_form();
			$this->insert_hidden_fields($hidden_fields);
		}
	}
	
	public function output(){
		if(!empty($this->form)){
			$this->form.= '</fieldset></form>';
			return $this->form;
		} else {
			$this->new_form();
			$this->output();
		}
	}
	
}

?>